/**
 * Clase que simula un evento dentro del banco
 * @author Diego
 */
public class Evento {
	private int tiempo;
	private Object objeto;
	
	/**
	 * Metodo que genera un nuevo evento
	 * @param tiempo el tiemnpo en el que el evento ocurrira
	 * @param objeto el objeto que sera modificado por el evento
	 */
	public Evento(int tiempo, Object objeto){
		this.tiempo = tiempo;
		this.objeto = objeto;
		
	}
	
	/**
	 * Metodo que realiza la accion del evento
	 * @param masCorta la cola mas corta
	 * @param tActual el tiempo actual
	 * @return devuelve un evento de salia, en caso sea necesario
	 */
	public Evento accion(ColaBanco masCorta, int tActual){
		ColaBanco cola = new ColaBanco();
		if (objeto.getClass() == cola.getClass())
			return sacar((ColaBanco)objeto, tActual);
		else{
			return meter((Cliente)objeto, masCorta, tActual);
		}
	}
	
	/**
	 * Metodo que permite meter un cliente en la cola correspondiente
	 * @param cliente el cliente que sera insertado en la cola
	 * @param masCorta la cola en la que se colocara el cliente
	 * @param tActual el tiempo actual
	 * @return devuelve un evento de salida, si es necesario
	 */
	public Evento meter(Cliente cliente, ColaBanco masCorta, int tActual){
		return masCorta.add(cliente, tActual);
	}
	
	/**
	 * Metodo que permite sacar un cliente de una cola
	 * @param cola la cola de la que se sacara el cliente
	 * @param tActual el tiempo actual
	 * @return devuelve un evento de salida cuando sea necesario
	 */
	public Evento sacar(ColaBanco cola, int tActual){
		return cola.remove(tActual);
	}

	/**
	 * Metodo que permite obtener el tiempo del evento
	 * @return devuelve el tiempo que tiene el evento
	 */
	public int getTiempo() {
		return tiempo;
	}

}
